﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//
//int int_comp(const void* p1, const void* p2)
//{
//	return *((int*)p1) - *((int*)p2);
//}
//
//
//void swap(void* e1, void* e2, int width)
//{
//	int i = 0;
//	for (i = 0; i < width; i ++ )
//	{
//		char tem = *((char*)e1 + i);
//		*((char*)e1 + i) = *((char*)e2 + i);
//		*((char*)e2 + i) =  tem;
//
//	}
//}
//void _qsort(void* arr, int sz, int width, int(*comp)(void* p1, void* p2))
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (comp((char*)arr+j*width, (char*)arr + (j+1) * width) > 0)
//			{
//				swap((char*)arr + j * width, (char*)arr + (j + 1) * width, width);
//			}
//		}
//	}
//}
//
//
//void print(int arr[],int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}
//
//int main()
//{
//	//qsort的模拟
//	//排列整型
//	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int width = sizeof(int);
//
//	print(arr, sz);
//
//	_qsort(arr, sz, width, int_comp);
//
//	print(arr, sz);
//
//	return 0; 
//}
//#include <stdio.h>
//int main()
//{
//	int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int* ptr1 = (int*)(&aa + 1);
//	int* ptr2 = (int*)(*(aa + 1));                           
//	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int a[5] = { 1, 2, 3, 4, 5 };
//	int* ptr = (int*)(&a + 1);
//	printf("%d,%d", *(a + 1), *(ptr - 1));
//	return 0;
//}
//
//&aa表示整个二维数组的地址
								//&aa+1表示跳过一个二维数组，
								//然后转化成（int*)类型
								// 让ptr接收，这时ptr指向
								//ptr-1后指向10的地址，解引用后就是10

//aa表示二维数组的首元素的地址也就是aa[0]
								// aa+1后跳过一个一维数组，解引用
								//
								//
//#include <stdio.h>
//int main()
//{
//	char* a[] = { "work","at","alibaba" };
//	char** pa = a;
//	pa++;
//	printf("%s\n", *pa);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	char* c[] = { "ENTER","NEW","POINT","FIRST" };
//	char** cp[] = { c + 3,c + 2,c + 1,c };
//	char*** cpp = cp;
//	printf("%s\n", **++cpp);
//	printf("%s\n", *-- * ++cpp + 3);
//	printf("%s\n", *cpp[-2] + 3);
//	printf("%s\n", cpp[-1][-1] + 1);
//	return 0;
//}
//int  my_strcmp(char* p1, char* p2)
//{
//	while (*p1 == *p2)
//	{
//		if (*p1 == '\0')
//		{
//			return 0;
//		}
//		p1++;
//		p2++;
//	}
//	return *p1 - *p2;
//
//}

//int main()
//{
//	int ret=my_strcmp("abcd", "abc");
//	if (ret > 0)
//	{
//		printf("大于\0");
//	}
//	if (ret == 0)
//	{
//		printf("等于\0");
//	}
//	if (ret < 0)
//	{
//		printf("小于\0");
//	}
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a = 0;
//	int* p = &a;
//	*p = 10;
//	printf("%d\n", *p);
//	printf("%d\n", a);
//
//	//printf("%p\n", p);
//	//printf("%p\n", &a);
//	return 0;
//}

//size_t my_strlen(const char*ch)
//{
//	if (*ch == '\0')
//		return 0;
//	else
//		return 1 + my_strlen(ch + 1);
//}
//
//#include<stdio.h>
//int main()
//{
//	char* ch = "abcdefg";
//	size_t ret=my_strlen(ch);
//	printf("%zd", ret);
//	return 0;
//}

//#include<stdio.h>
//#include<string.h>
//#include<assert.h>
//
//char* my_strncat( char* p1, const char* p2,int num)
//{
//	char* ret = p1;
//	assert(p1 != NULL);
//	assert(p2 != NULL);
//	while (*p1 != 0)
//	{
//		p1++;
//	}
//		while (*p1++ = *p2++ )
//		{
//			num--;
//			if (num == 0)
//				break;
//		}
//	return ret;
//}
//
//int main()
//{
//	char arr1[20] = "abc";
//	char arr2[] = "abcdefg";
//	int num = 3;
//	char* ret=my_strncat(arr1, arr2,num);
//	printf("%s\n", ret);
//	printf("%s\n", arr1);
//	printf("%s\n", arr2);
//	return 0;
//}

//int  my_strcmp(const char* arr1, const char* arr2)
//{
//	while (*arr1 == *arr2)
//	{
//		if (*arr2 == '\0')
//		{
//			return 0;
//		}
//		arr1++;
//		arr2++;
//	}
//	return *arr1 - *arr2;
//}


//char* my_strcat(char* arr1, char* arr2)
//{
//	char* arr3 = arr1;
//	while (*arr1 != '\0')
//	{
//		arr1++;
//	}
//	while (*arr1++ = *arr2++)
//	{
//		;
//	}
//	return arr3;
//}
//#include<stdio.h>
//#include<assert.h>
//
//char* my_strstr(const char* arr1, const char* arr2)
//{
//	char* s1 = NULL;
//	char* s2 = NULL;
//	char* cur = arr1;
//	while (*cur)
//	{
//		s1 = cur;
//		s2 = arr2;
//		while (*s1 && *s1 == *s2)
//		{
//			s1++;
//			s2++;
//			
//		}
//		if (*s2 == '\0')
//		{
//			return cur;
//		}
//		cur++;
//
//	}
//	return NULL;
//
//}
//int main()
//{
//	char arr1[20] = "abcde";
//	char arr2[] = "bcdej";
//	char* ret=my_strstr(arr1, arr2);
//	if (ret != NULL)
//	{
//		printf("%s ", ret);
//
//	}
//	else
//		printf("找不到 \n");
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int a[5] = { 1, 2, 3, 4, 5 };
//	int* ptr = (int*)(&a + 1);
//	printf("%d,%d", *(a + 1), *(ptr - 1));
//	return 0;
//}
//在X86环境下
//假设结构体的⼤⼩是20个字节
//程序输出的结构是啥？
//struct Test
//{
//	int Num;
//	char* pcName;
//	short sDate;
//	char cha[2];
//	short sBa[4];
//}*p = (struct Test*)0x100000;
//int main()
//{
//	printf("%p\n", p + 0x1);
//	printf("%p\n", (unsigned long)p + 0x1);
//	printf("%p\n", (unsigned int*)p + 0x1);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int a[3][2] = { (0, 1), (2, 3), (4, 5) };
//	int* p;
//	p = a[0];
//	printf("%d", p[0]);
//	return 0;
//}
//假设环境是x86环境，程序输出的结果是啥？
//#include <stdio.h>
//int main()
//{
//	int a[5][5];
//	int(*p)[4];
//	p = a;
//	printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	char ch[] = "abcdefg";
//	int* p1 = arr;
//	char* p2 = ch;
//	p1++;
//	p2++;
//	printf("%d ", *p1);
//	printf("%c ", *p2);
//
//	return 0;
//}

//int main()
//{
//	unsigned char a = 200;
//	unsigned char b = 100;
//	unsigned char c = 0;
//	c = a + b;
//	printf( "%d %d", a + b, c);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	 char a[1000] = { 0 };
//	int i = 0;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	for (i = 0; i < 1000; i++)
//	{
//		printf("%d ", a[i]);
//
//	}
//	printf("\n");
//	printf("%d", strlen(a));
//	return 0;
//}
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	int n = 0;
//	int i = 0,j=0;
//	char arr[100][100] = {0};
//	char tem[100] = { 0 };
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		scanf("%s", arr[i]);
//	}
//	for (i = 0; i < n - 1; i++)
//	{
//		for (j = 0; j < n-1-i; j++)
//		{
//			if (strcmp(arr[j], arr[j + 1]) > 0)
//			{
//				strcpy(tem, arr[j]);
//				strcpy(arr[j], arr[j + 1]);
//				strcpy(arr[j + 1], tem);
//			}
//		}
//	}
//	for (i = 0; i < n; i++)
//	{
//		printf("%s ", arr[i]);
//	}	
//	return 0;
//}
//#include<stdio.h>
//#include<string.h>
//int main() {
//	int i, j;
//	char s[5][85], t[85];
//
//	for (i = 0; i < 5; i++)
//		scanf("%s", s[i]);
//	for (i = 0; i < 4; i++)
//		for (j = 0; j < 4 - i; j++)
//			if (strcmp(s[j], s[j + 1]) > 0) 
//			{//字符串的比较
//				strcpy(t, s[j]);//字符串的复制
//				strcpy(s[j], s[j + 1]);
//				strcpy(s[j + 1], t);
//			}
//	for (i = 0; i < 5; i++)
//		printf("%s ", s[i]);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int  a[1000] = { 0 };
//	for (int i = 0; i < 10; i++)
//	{
//		a[i] = i;
//	}
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	printf("\n");
//	printf("%d ", strlen(a));
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int a = 0x11223344;
//	char* pc = (char*)&a;
//	*pc = 0;
//	printf("%x\n", a);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a = 1;
//	char* p = (char*)&a;
//	*p = 0;
//	printf("%d \n", *p);
//	printf("%d \n", *((char*)&a));
//	if (*((char*)&a) == 0)
//		printf("1");
//	else
//		printf("0");
//	//printf("%x ", a);
//		return 0;
//}
//#include<stdio.h>
//int main()
//{
//	char a[100] = { 0 };
//	scanf("%s", a);
//	printf("%s", a);
//	return 0;
//}
//#include <stdio.h>
//#include <ctype.h>
//int main()
//{
//	int i = 0;
//	char str[] = "Test String.\n";
//	char c;
//	while (str[i])
//	{
//		c = str[i];
//		if (islower(c))
//			c -= 32;
//		putchar(c);
// i++;
// }
// return 0;
//}
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr1[100] = "abcloxxxxxxxxxxxxxx";
//	char arr2[] = "abck";
//	//strncpy(arr1 + 6, arr2, 3);
//	//strncat(arr1, arr2, 3);
//	int ret=strncmp(arr1, arr2, 4);
//	printf("%d ", ret);
//	printf("%s ", arr1);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int m = 22;
//	int n = 33;
//	int count = 0;
//	int tem = m ^ n;
//	while (tem != 0)
//	{
//		tem = tem & (tem - 1);
//		count++;
//	}
//	printf("%d ", count);
//
//	printf("%#x ", tem);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a = 1;
//	char* p = (char*)&a;
//	*p = 0;
//	if (*((char*)&a) == 0)
//		printf("1");
//	else
//		printf("0");
//	return 0;
//}


//#include<stdio.h>
//#include<string.h>
//#include<assert.h>
//
//void* my_memmove(char* p1, char* p2, size_t num)
//{
//	void* ret = p1;
//	assert(p1);
//	assert(p2 );
//	if (p1 < p2)
//	{
//		while (num--)
//		{
//			*((char*)p1) = *((char*)p2);
//			(char*)p1 = (char*)p1 + 1;
//			(char*)p2 = (char*)p2 + 1;
//		}
//	}
//	else
//		while (num--)
//		{
//			*((char*)p1 + num) = *((char*)p2 + num);
//		}
//	return ret;		
//}
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	my_memmove(arr1, arr1+5, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	int i = 0;
//
//	memmove(arr1, arr1+5, 5 * sizeof(int));
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ",arr1[i]);
//	}
//	return 0;
//}
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	int i = 0;
//
//	memcpy(arr2, arr1, 5 * sizeof(int));
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	return 0;
//}
//#include <stdio.h>
//#include <string.h>
//int main()
//{
//	char arr1[] = "abcdefg";
//	char arr2[] = "abcdefh";
//	int n;
//	n = memcmp(arr1,arr2, sizeof(arr1));
//	if (n > 0)
//		printf("大于\n");
//	else if (n < 0)
//		printf("小于\n");
//	else
//		printf("等于\n");
//	return 0;
//}
//#include <stdio.h>
//
//int main()
//{
//	/*char a[1000] = { 0 };
//	int i = 0;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	for (i = 0; i < 1000; i++)
//	{
//		printf("%d ", a[i]);
//	}
//
//	printf("%d", strlen(a));*/
//	char a = 128;
//	printf("%u", a);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//	int a[4] = { 1, 2, 3, 4 };
//	int* ptr1 = (int*)(&a + 1);
//	int* ptr2 = (int*)((int)a + 1);
//	printf("%x,%x", ptr1[-1], *ptr2);
//	return 0;
//}

//}